package cn.net.cfss.fgbp.provider.console.spi;

import cn.net.cfss.fgbp.api.console.dto.SysRoleMenuDto;
import cn.net.cfss.fgbp.api.console.inte.ISysRoleMenuService;
import cn.net.cfss.fgbp.api.console.vo.SysRoleMenuVo;
import cn.net.cfss.fgbp.provider.console.biz.SysMenuDtoBiz;
import cn.net.cfss.fgbp.provider.console.biz.SysRoleMenuDtoBiz;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author oygq
 * @title: ISysRoleMenuServiceImpl
 * @description: TODO
 * @date 2019/4/8 11:49
 */
@RestController
@Slf4j
public class SysRoleMenuSpi implements ISysRoleMenuService {

    @Autowired
    SysRoleMenuDtoBiz sysRoleMenuDtoBiz;

    @Autowired
    SysMenuDtoBiz sysMenuDtoBiz;

    @Override
    public boolean insert(SysRoleMenuVo vo) {
        try {
            //sysRoleMenuDtoBiz.insertBatch(vo);
            SysRoleMenuDto dto = new SysRoleMenuDto();
            dto.setRoleId(vo.getRoleId());
            sysRoleMenuDtoBiz.delete(dto);
            sysRoleMenuDtoBiz.insertBatch(vo);

            //角色信息缓存redis
            sysRoleMenuDtoBiz.pushRoleCache(vo.getRoleId());
        } catch (Exception e) {
            log.error("新增角色按钮错误:{}", e.getMessage());
            return false;
        }
        log.info("请求参数:{}，返回参数：{}", vo, true);

        return true;
    }

    @Override
    public boolean update(SysRoleMenuVo vo) {
        try {
            SysRoleMenuDto dto = new SysRoleMenuDto();
            dto.setRoleId(vo.getRoleId());
            sysRoleMenuDtoBiz.delete(dto);
            sysRoleMenuDtoBiz.insertBatch(vo);
            //sysRoleMenuDtoBiz.updateSelectiveById(vo);
            //角色信息缓存redis
            sysRoleMenuDtoBiz.pushRoleCache(vo.getRoleId());
        } catch (Exception e) {
            log.error("新增角色按钮错误:{}", e.getMessage());
            return false;
        }

        log.info("请求参数:{}，返回参数：{}", vo, true);
        return true;
    }

    @Override
    public boolean delete(Long roleMenuId) {
        try {
            sysRoleMenuDtoBiz.deleteById(roleMenuId);
        } catch (Exception e) {
            log.error("删除角色按钮错误:{}", e.getMessage());
            return false;
        }

        log.info("请求参数:{}，返回参数：{}", roleMenuId, true);

        return true;
    }

    @Override
    public boolean deleteBatch(Long[] roleMenuIds) {
        try {
            sysRoleMenuDtoBiz.deleteBatch(roleMenuIds);
        } catch (Exception e) {
            log.error("批量删除角色按钮错误:{}", e.getMessage());
            return false;
        }
        log.info("请求参数:{}，返回参数：{}", roleMenuIds, true);

        return true;
    }

    @Override
    public List<Long> queryByRoleId(Long roleId) {
        SysRoleMenuVo vo = new SysRoleMenuVo();
        vo.setRoleId(roleId);
        List<SysRoleMenuDto> dto = sysRoleMenuDtoBiz.selectList(vo);
        List<Long> menus = new ArrayList<>();
        for(SysRoleMenuDto menu : dto){
            menus.add(menu.getMenuId());
        }

        log.info("请求参数:{}，返回参数：{}", roleId, menus);

        return menus;
    }

    public boolean deleteByMenus(SysRoleMenuVo vo){
        try {
            sysRoleMenuDtoBiz.deleteByMenus(vo);
        } catch (Exception e) {
            log.error("批量删除角色按钮错误:{}", e.getMessage());
            return false;
        }

        log.info("请求参数:{}，返回参数：{}", vo, true);
        return true;
    }

    @Override
    public   Map<Long, List<String>>  queryMenuByRoleId(List<Long> roles) {
        Map<Long, List<String>>  map = sysMenuDtoBiz.selectMenuByRoleId(roles);

        log.info("请求参数:{}，返回参数：{}", roles, map);
        return map;
    }

    @Override
    public Map<Long, List<String>> queryProjectByRoleId(List<Long> roles) {
        return sysMenuDtoBiz.queryProjectByRoleId(roles);
    }
}
